<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>改变this指向</title>
</head>

<body>
  <script>
        // this指向
        //     一般函数都指向window
        //     严格模式下，函数this指向为undefined
        //     对象中  this指向这个对象
        //     事件处理函数中，this指向事件源
        //     箭头函数没有自己的this指向



        //  改变this指向
        //  call(新的this指向,原函数的参数)   会直接调用原函数

        // apply(新的this指向,[原函数的参数])  会直接调用原函数

        // bind(新的this指向,原函数的参数)  只是改变this指向，不会调用原函数

      let obj = {
        name:'ljj'
      }

      const obj2 = {
        fn : function(n ,m ){
          console.log(this.name)
          console.log(this.name + n + m )
        }
      }
      https://www.runoob.com/
      obj2.fn(1)

      // 改变this指向 -> 指向obj 传参、调用原函数fn()
      obj2.fn.call(obj,1,2)

      // 改变this指向 -> 指向obj 传参、调用原函数fn()
      // 传参方式不一样
      obj2.fn.apply(obj , [1,2])

      obj2.fn.bind(obj , 1,2)//不会调用原函数，改变了this指向
      console.log(obj2.fn.bind(obj , 1,2))
      obj2.fn.bind(obj , 1,5)()

  </script>
</body>

</html>